package com.zrrd.controller;

import com.zrrd.pojo.Tea;
import com.zrrd.service.TeaService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @author WanJl
 * @version 1.0
 * @title TeaController
 * @description
 * @create 2024/1/29 9:52
 */
@RestController
@RequestMapping("/teas")
public class TeaController {
    @Autowired
    private TeaService teaService;

    /**
     * 查询所有
     * @return 所有茶叶信息
     */
    @GetMapping
    public List<Tea> queryAll(){
        System.out.println("controller---queryTeaAll----");
        return teaService.queryTeaAll();
    }

    /**
     * 什么时候使用@PathVariable注解？
     * 当使用RestFull风格开发，传递的参数只有一个的时候使用@PathVariable注解
     * http://127.0.0.1:8080/资源名(大多数情况是项目名)/teas/1
     * http://127.0.0.1:8080/ssmTest01_war/teas/1
     * 多数情况下，@PathVariable注解都是和@GetMapping注解合作使用
     * @param id
     * @return
     */
    @GetMapping("/{id}")
    public Tea queryById(@PathVariable Integer id){
        System.out.println("controller---queryById----"+id);
        return teaService.queryOneById(id);
    }

    /**
     * 添加功能
     * 遵循RestFull风格开发约定，添加使用@Post请求发送，传递的参数是以POST请求的请求体进行传递的。
     * 使用@RequestBody注解，方便我们可以之前从前端，把要传递的参数以JSON格式的形式传递过来
     *
     * {
     *     "teaName":"茉莉花茶",
     *     "teaTypeId":1,
     *     "ordered":100,
     *     "description":"茉莉花茶茉莉花茶茉莉花茶茉莉花茶茉莉花茶茉莉花茶",
     *     "status":0
     * }
     * @param tea
     * @return
     */
    @PostMapping
    public Integer add(@RequestBody Tea tea){
        System.out.println("controller---add----"+tea);
        return teaService.addTea(tea);
    }

    /**
     * 修改
     * @param tea
     * @return
     */
    @PutMapping
    public Integer update(@RequestBody Tea tea){
        System.out.println("controller---update----"+tea);
        return teaService.updateTea(tea);
    }

    /**
     * 删除
     * @param id
     * @return
     */
    @DeleteMapping("/{id}")
    public Integer remove(@PathVariable Integer id){
        System.out.println("controller---delete----"+id);
        return teaService.removeTea(id);
    }

    /**
     * 模糊查询
     * 【@RequestParam】解决的前端发送过来的请求参数名和当前方法接收的形式参数名不一致的情况，如果一致，可以不用@RequestParam
     *  required = false：设置该请求参数为非必填项
     *  defaultValue = 默认值 ：设置该请求参数的默认值
     * @param info
     * @return
     */
    @RequestMapping("/queryByFuzzy")
    @ResponseBody
    public List<Tea> queryByFuzzy(@RequestParam(value = "info",required = false)String info){
        System.out.println("controller---queryByFuzzy----"+info);
        return teaService.fuzzyQueryByNameInfo(info);
    }

    /**
     * 根据多个id查询
     * 【@RequestParam】注解会帮助把多个同名的请求参数，封装成一个集合，传入给方法的形参
     * @param ids
     * @return
     */
    @RequestMapping("/queryByIds")
    @ResponseBody
    public List<Tea> queryByIds(@RequestParam List<Integer> ids){
        return teaService.queryByIds(ids);
    }


}
